package packet

import (
	"errors"
)

type Packet interface {
	Bytes() int
	GetCmd() Cmd
	CmdStr() string
	// 是否是请求包
	IsRequest() bool
	// 是否是回响包
	IsResponse() bool

	String() string

	GetPayload() []byte
	GetRaw() []byte

	// 将包编码为传输数据
	Marshal() ([]byte, error)
}

// 命令
type Cmd interface {
	IsCmd()
	String() string
	Equal(Cmd) bool
}

// Marshal 将包编码为传输数据
func Marshal(pkt Packet) ([]byte, error) {
	if pkt == nil {
		return nil, errors.New("packet.Marshal: packet is nil")
	}
	return pkt.Marshal()
}
